package demo;
// 单例模式
// 懒汉模式
class SingletonLazy {
    // volatile 解决内存可见性和指令重排序问题
    private volatile static SingletonLazy instence = null;
    private SingletonLazy(){}

    public static SingletonLazy getInstance(){
        // 外面的这层if用于判断，如没有这一层判断，则每次进来都会加锁，消耗大量时间做无用功
        if(instence == null){
            // synchronized保证instance的读和写是原子性的
            synchronized (Singleton.class){
                // 判断单例是否已经创建，若无，则创建。
                if(instence == null){
                    instence = new SingletonLazy();
                }
            }
        }
        return instence;
    }
}
public class Demo2 {
    public static void main(String[] args) {
        SingletonLazy s = SingletonLazy.getInstance();
    }
}
